#ifndef _DEBUG_SHOW_H_
#define _DEBUG_SHOW_H_

#include"lane_const_parameter.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

namespace rmd
{
using namespace cv;

    class DebugShow
    {
    public:
        DebugShow() {}

        static DebugShow* instance_;
        static DebugShow* Instance();

        bool SHOW_INDEX = true;

        void debugCaptureImage(char*  image_path, int picture_ID, char* pBaseDir, short int snIsShow = 0);

        void debugInputImage(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugIPMImage(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugGrayImage(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugFeature(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugFeatureIPM(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugHoughLine(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugCluterLine(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugFrameAssociation(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugVanishingShow(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, bool flag = true, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void debugResultShow(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void showImageSpine(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);

        void FinallyResultShow(Mat mSrcImageData, int picture_ID, char* pBaseDir, short int snIsShow = 0, int showWidth = kImageWidth, int showHeight = kImageHeight);


        //将数字显示在图像中
        void ShowTextinIplImage( IplImage *pImg,Point pt,int nId);
        void ShowTextinMat(Mat& Input,Point pt,int nId);
        void ShowTextinMat(Mat& Input,Point pt,char* str);

        //显示透明色
        void DrawTransCir(Mat& Input, CvPoint ** pts, int* npts, CvScalar color, int contours = 1, double alpha = 0.8);
        void DrawMaskinImage(Mat& Input, Mat maskInput, double alpha);

        void zyrLine(Mat Image, Point pt1, Point pt2, Scalar color, int thickness, int lineType);

    };

}
#endif
